#include "../inc/deplacement.h"


Deplacement::Deplacement()
{

}

Deplacement::Deplacement(const float _x1min, const float _x1max, const float _x2min, const float _x2max,
						const int _hauteur, const int _base)
	: x1min(_x1min), x1max(_x1max), x2min(_x2min), x2max(_x2max), hauteur(_hauteur), base(_base)
{
	gravite.x = 0.f;
	gravite.y = 98.0665f;
	//~ gravite.y = 1.f;
}

Deplacement::~Deplacement()
{

}

void Deplacement::deplacerGauche(Blob & b, const int val)
{
	if (localiseBlob(b) == 0) {

		if (b.getCentre().x - b.getLargeur() / 2.f - val >= x1min) {
			b.getCentre().x -= val;
		}

	} else {
		if (b.getCentre().x - b.getLargeur() / 2.f - val >= x2min) {
			b.getCentre().x -= val;
		}
	}
}

void Deplacement::deplacerDroite(Blob & b, const int val)
{
	if (localiseBlob(b) == 0) {
		if (b.getCentre().x + b.getLargeur() / 2.f + val <= x1max) {
			b.getCentre().x += val;
		}

	} else {
		if (b.getCentre().x + b.getLargeur() / 2.f + val <= x2max) {
			b.getCentre().x += val;
		}
	}
}

void Deplacement::saut(Blob & b, const int val)
{
	if (b.getEtatSaut() == 1) { // Monte
		b.getCentre().y -= val;
		if (b.getCentre().y <= hauteur)
			b.setEtatSaut(2);

	} else if (b.getEtatSaut() == 2) { // Descend
		b.getCentre().y += val;
		if (b.getCentre().y >= base)
			b.setEtatSaut(0);
	}
}

bool Deplacement::enSaut(Blob & b)
{
	if(b.getEtatSaut() > 0)
		return true;
	else
		return false;
}

int Deplacement::localiseBlob(Blob & b)
{
	if (b.getCentre().x < x1max)
		return 0;
	else
		return 1;
}

void Deplacement::sauter(Blob & b, const int val)
{
	if (b.getEtatSaut() == 0) {
		b.setEtatSaut(1);
		this->saut(b, val);
	}
}

// Backup
//~ void Deplacement::deplacer(Balle & b, const float val)
//~ {
	//~ vec2D newC;
	//~ newC.x = b.getCentre().x + b.getDirection().x;
	//~ newC.y = b.getCentre().y + b.getDirection().y;
	//~ float dst = sqrt( (b.getCentre().x - newC.x) * (b.getCentre().x - newC.x)
					//~ + (b.getCentre().y - newC.y) * (b.getCentre().y - newC.y) );
//~
	//~ float pourcent = val / dst;
	//~ b.getCentre().x = b.getCentre().x + b.getDirection().x * pourcent;
	//~ b.getCentre().y = b.getCentre().y + b.getDirection().y * pourcent;
//~ }


void Deplacement::deplacer(Balle & b, const float delta)
{
	b.update(delta);
}

vec2D Deplacement::getGravite()
{
	return gravite;
}
